Інформація про навчальний заклад

ВУЗ:
Національний технічний університет України Київський політехнічний інститут
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Не вказано

Інформація про роботу

Рік:
2024
Тип роботи:
Звіт
Предмет:
Алгоритмізація та програмування

Частина тексту файла

Національний технічний університет України  «Київський політехнічний інститут імені Ігоря Сікорського» Алгоритмізація та програмування 1: Базові концепції програмування ЗВІТ До модульної контрольної роботи №2 Варіант 3 Дата «15» грудня 2021 Завдання на модульну контрольну роботу: На початку завдання дано зашифроване слово, та початкову матрицю. За допомогою цих даних потрібно розшифрувати дане слово за допомогою шифру Гілла. Результат роботи повинен відобразити: 1.    Обернену матрицю; 2.    Розшифроване повідомлення. Скріншот завдання: / / Хід роботи На початку виконання програми отримується рядок символів(строку): Зашифроване слово та початкова матриця ( матриця-ключ ). Далі проводиться його конвертація у матрицю індексів, згідно англійського алфавіту. Шукається обернена матриця до матриці-ключа та виконується її перетворення до потрібного вигляду. За допомогою множення матриць знаходиться кінцева матриця. Далі за допомогою англійського алфавіту, по індексам букв перетворюємо кінцеву матрицю індексів у матрицю символів і виводимо у консоль кінцеве розшифроване слово. Посилання на Repl.it: https://replit.com/join/molvlvfddn-tr-15fundamient Результати виконання програми: / Код програми: #include <stdio.h> #include <math.h> #define SIZE 2 #define WORDSIZE 4 int main(void) { char arr[] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'}; char originalWord[WORDSIZE] = "dvdz"; char text[SIZE][SIZE] = {{},{}}; int selec = 0; // Перевод зашифрованого слова у матрицю символів while( selec < WORDSIZE) { for(int i = 0; i < SIZE; i++) { for(int j = 0; j < SIZE; j++) { text[i][j] = originalWord[selec]; selec++; } } } printf("\033[1;31m"); printf("Зашифроване слово: \n"); printf("\033[0m"); for(int i = 0; i < SIZE; i++) { for(int j = 0; j < SIZE; j++) { printf("%c", text[i][j]); } } printf("\n\n"); int key[SIZE][SIZE] = { {6,9}, {3,5} }; printf("\033[1;31m"); printf("Матриця шифрування: \n"); printf("\033[0m"); for(int i = 0; i < SIZE; i++) { printf("| "); for(int j = 0; j < SIZE; j++) { printf("%d ", key[i][j]); } printf("|\n"); } printf("\n"); int mat[SIZE][SIZE] = {{},{}}; // перетворення матриці символів у матрицю індексів for(int i = 0; i < SIZE; i++) { for(int j = 0; j < SIZE; j++) { for(int c = 0; c < 26; c++) { if(text[i][j] == arr[c]) { mat[i][j] = c; } } } } int det = key[0][0]*key[1][1]-key[1][0]*key[0][1]; if(det == 0){ printf("\033[1;31m"); printf("EROR: determinant = 0"); printf("\033[0m"); return 0; } else if(det < 0) { det = det + 26; } int obertKey[SIZE][SIZE] = {{},{}}; obertKey[0][0] = key[1][1]; obertKey[0][1] = -key[0][1]; obertKey[1][0] = -key[1][0]; obertKey[1][1] = key[0][0]; // Транспонування матриці ключа int buff = 0; buff = key[0][1]; key[0][1] = key[1][0]; key[1][0] = buff; double obertKey1[SIZE][SIZE]; for(int i = 0; i < SIZE; i++){ for(int j = 0; j < SIZE; j++) { obertKey1[i][j] = (pow(-1, i+j)*key[SIZE-1-i][SIZE-1-j])/det; } } printf("\033[1;31m"); printf("Обернена матриця шифрування: \n"); printf("\033[0m"); for(int i = 0; i < SIZE; i++) { printf("| "); for(int j = 0; j < SIZE;j++) { printf("%.2f ",obertKey1[i][j]); } printf("|\n"); } printf("\n"); for(int i = 0; i < SIZE; i++) { for(int j = 0; j < SIZE; j++) { if(obertKey[i][j] < 0) obertKey[i][j] = obertKey[i][j] + 26; } } int q = 0; int count = 0; int koef = 0; while((q*det)%26 != 1) { q++; count = q; } koef = count; for(int i = 0; i < SIZE; i++) { for(int j = 0; j < SIZE; j++) { obertKey[i][j] = (obertKey[i][j]*koef) % 26; } } printf("\033[1;31m"); printf("Обернена матриця перетворена mod26: \...
Антиботан аватар за замовчуванням

03.05.2023 18:05

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Завантаження файлу

Якщо Ви маєте на своєму комп'ютері файли, пов'язані з навчанням( розрахункові, лабораторні, практичні, контрольні роботи та інше...), і Вам не шкода ними поділитись - то скористайтесь формою для завантаження файлу, попередньо заархівувавши все в архів .rar або .zip розміром до 100мб, і до нього невдовзі отримають доступ студенти всієї України! Ви отримаєте грошову винагороду в кінці місяця, якщо станете одним з трьох переможців!
Стань активним учасником руху antibotan!
Поділись актуальною інформацією,
і отримай привілеї у користуванні архівом! Детальніше

Оголошення від адміністратора

Антиботан аватар за замовчуванням

пропонує роботу

Admin

26.02.2019 12:38

Привіт усім учасникам нашого порталу! Хороші новини - з‘явилась можливість кожному заробити на своїх знаннях та вміннях. Тепер Ви можете продавати свої роботи на сайті заробляючи кошти, рейтинг і довіру користувачів. Потрібно завантажити роботу, вказати ціну і додати один інформативний скріншот з деякими частинами виконаних завдань. Навіть одна якісна і всім необхідна робота може продатися сотні разів. «Головою заробляти» продуктивніше ніж руками! :-)

Новини